package com.erbao.nettystudy.bio;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author CaoBaoYin
 * @since 2021/10/21 7:44
 */
public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket();
        ss.bind(new InetSocketAddress("127.0.0.1", 8888));;

        /*server 相当于一个接线板（排查），每来一个客户端都连接到这个接线板上，并且是另起一个线程
        * 只有一个线程不行，bio 是 阻塞的，会造成别的连接连不上来，或者无法执行别的连接的逻辑*/
        while (true) {
            Socket accept = ss.accept();// 接收一个连接
            System.out.println("a client connected");
            // 启动一个新的线程，处理这个连接
            // 这里用线程池也不合适，线程池很快就占满了，因为内部的线程运行是阻塞的。
            new Thread(() -> {
                handle(accept);
            }).start();

            
        }
    }

    private static void handle(Socket s) {
        byte[] b = new byte[10224];
        try {
            int len = s.getInputStream().read(b);
            System.out.println(new String(b, 0, len ));

            s.getOutputStream().write(b, 0, len );
            s.getOutputStream().flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
